在ubuntu 22.04 上通过 Docker部署OpenGrok

您所在的位置:网站首页 opengrok 更新索引 在ubuntu 22.04 上通过 Docker部署OpenGrok

在ubuntu 22.04 上通过 Docker部署OpenGrok

#在ubuntu 22.04 上通过 Docker部署OpenGrok| 来源: 网络整理| 查看: 265

Linux kernel有2000多万行代码,当需要搜索的代码量很大时,使用OpenGrok可以加速搜索速度.

通过Docker部署OpenGrok能隔离部署的环境与host环境,互不干扰.

过程如下

准备linux代码

mkdir /home/jenkins/opengrok/{src,data,dist,etc,log} -p cd opengrok/src/ git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git

安装Docker

参考 https://www.runoob.com/docker/ubuntu-docker-install.html

Docker功能上类似于在Ubunut22.04 这个host OS上安装了一个虚拟机,虚拟机上运行的OS是docker image.

sudo su curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

创建docker-compose.yml文件

Docker将根据docker-compose.yml的配置进行image的下载和运行, 此image里已经安装好opengrok和tomcat.

参考 https://hub.docker.com/r/opengrok/docker/

cd ~ vim docker-compose.yml #填写如下内容 ---------------------------------------------------------------------------------------------------- version: "3" # More info at https://github.com/oracle/opengrok/docker/ services: opengrok: container_name: opengrok image: opengrok/docker:latest ports: - "8080:8080/tcp" environment: SYNC_PERIOD_MINUTES: '1440' # Volumes store your data between container upgrades volumes: - '/home/jenkins/opengrok/src/:/opengrok/src/' # source code - '/home/jenkins/opengrok/etc/:/opengrok/etc/' # folder contains configuration.xml - '/home/jenkins/opengrok/data/:/opengrok/data/' # index and other things for source code

image: opengrok/docker:latest

指定docker去opengrok/docker仓库里下载最新版本的image, 这个image里安装好了opengrok和tomcat.

image类似于操作系统的某个发行版,比如ubuntu 20.04或在22.10等,只是里面已经安装好了需要部署的特定软件而已. container相当于这个OS发行版在某台PC上的某次安装后 在此PC上的部署状态.

image本地缓存在 /var/lib/docker/overlay2 里, /var/lib/docker/image 里只是一些索引到overlay2的关键信息,并不是tar包

repo 可能是国外的,有几百兆,下载需要一些时间.

container_name: opengrok

为这个部署状态取名为opengrok

container本地缓存在 /var/lib/docker/containers 里, 同样是一些索引到overlay2的关键信息,并不是tar包

8080:8080/tcp

把 host的8080端口转发到docker的8080端口,这样对8080端口的网页访问将由docker虚拟机里的tomcat 来处理

SYNC_PERIOD_MINUTES: '1440'

由OpenGrok管理的代码,每天于社区仓库同步一次,并更新代码到最新状态

'/home/jenkins/opengrok/src/:/opengrok/src/'

mount host OS的/home/jenkins/opengrok/src/到docker虚拟机OS的/opengrok/src/目录,这样任何一个OS对此目录的修改都会保存到磁盘上文件系统的唯一目录里

下载并运行docker image

sudo docker compose up -d

至此,已经可以在其他主机上通过浏览器访问 http://host-ip-addr:8080/ 了,如果出现访问异常,可以查看docker启动log

sudo docker compose logs

也可以检查一下host的端口是否被防火墙禁止访问了

[email protected]:~$ sudo lsof -i:8080 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME docker-pr 3124 root 4u IPv4 49493 0t0 TCP *:http-alt (LISTEN) docker-pr 3144 root 4u IPv6 38263 0t0 TCP *:http-alt (LISTEN) # 上面是正常的情况,如果被禁用了,可以改为允许访问 sudo ufw allow 8080/tcp

其他基础知识

参考 https://docs.docker.com/engine/reference/commandline/docker/

参考 [email protected]:~$ docker --help

# Docker虚拟机关机/开机 [email protected]:~$ sudo docker stop opengrok [email protected]:~$ sudo docker start opengrok # 加入新的代码目录到src后, 重启docker开始同步代码ctags 索引 [email protected]:~$ sudo docker restart opengrok # ssh 登陆 docker vm [email protected]:~$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dd21aed1dc33 opengrok/docker:latest "/scripts/start.py" About a minute ago Up About a minute 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp opengrok [email protected]:~$ sudo docker exec -it opengrok bash root@dd21aed1dc33:/usr/local/tomcat# # tomcat 的配置文件 root@dd21aed1dc33:/usr/local/tomcat# ll /opengrok/etc -rw-r--r-- 1 root root 28027 Feb 24 02:54 configuration.xml -rw-r--r-- 1 root root 40 Feb 24 02:44 mirror.yml # ctags 生成的索引文件 root@dd21aed1dc33:/usr/local/tomcat# ll /opengrok/data drwxr-xr-x 3 root root 19 Feb 24 02:44 historycache/ drwxr-xr-x 4 root root 30 Feb 24 02:44 index/ drwxr-x--- 4 root root 30 Feb 24 02:45 suggester/ -rw-r--r-- 1 root root 0 Feb 24 02:54 timestamp drwxr-xr-x 4 root root 30 Feb 24 02:44 xref/ root@dd21aed1dc33:/usr/local/tomcat# ll /scripts/ -rwxr-xr-x 1 root root 2055 Jan 6 21:45 logging.properties* -rwxr-xr-x 1 root root 1378 Jan 6 21:45 periodic_timer.py* drwxr-xr-x 2 root root 44 Feb 24 02:44 __pycache__/ -rwxr-xr-x 1 root root 7467 Jan 6 21:45 README.md* -rwxr-xr-x 1 root root 20275 Jan 6 21:45 start.py* -rwxr-xr-x 1 root root 894 Jan 6 21:45 sync.yml* # 备份container的初始状态, 备份container就相当于用当前container状态的快照定义成一个image [email protected]:~$ sudo docker commit -p dd21aed1dc33 my-repo/opengrok:2013-03-13-initial-state sha256:e0dccdd02dadd3f60d52fc711d36fd2920f6c07271301bd411ffed921d0e50e7 # 修改container root@dd21aed1dc33:/usr/local/tomcat# apt update root@dd21aed1dc33:/usr/local/tomcat# apt install -y git vim plocate silversearcher-ag htop iftop ifstat iotop psmisc root@dd21aed1dc33:/usr/local/tomcat# git config --global --add safe.directory /opengrok/src/linux root@dd21aed1dc33:/usr/local/tomcat# exit [email protected]:~$ # 备份container安装一些tools后的状态 [email protected]:~$ sudo docker commit -p dd21aed1dc33 my-repo/opengrok:2013-03-13-installed-some-tools sha256:c94ad1123f4e55cb319a9583f563c4af702c67e783b7f13888ecb2aa2076c2ee # 查看docker image [email protected]:~$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE my-repo/opengrok 2013-03-13-initial-state e0dccdd02dad 5 minutes ago 902MB my-repo/opengrok 2013-03-13-installed-some-tools c94ad1123f4e 3 minutes ago 1.12GB opengrok/docker latest 45fb8fb42284 2 months ago 902MB # 注意docker commit并不是保存成差分文件, 可以看到完整的image是很大的 # image文件的位置在/var/lib/docker/image/ # 删除docker image [email protected]:~$ sudo docker rmi my-repo/opengrok:2013-03-13-initial-state Untagged: my-repo/opengrok:2013-03-13-initial-state Deleted: sha256:e0dccdd02dadd3f60d52fc711d36fd2920f6c07271301bd411ffed921d0e50e7 Deleted: sha256:05ea10406083e8ffbe5a68e988166aba0ea09a0522fb4ce0c06aa29aa6a43352 # initial state和opengrok/docker:latest的image是完全一样的,没必要备份 # 删除container, 当container的内部环境被破坏时 root@dd21aed1dc33:/usr/local/tomcat# mv /etc /etc-bk    #不小心把container破坏了 root@dd21aed1dc33:/usr/local/tomcat# exit [email protected]:~$ sudo docker stop opengrok [email protected]:~$ sudo docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dd21aed1dc33 opengrok/docker:latest "/scripts/start.py" 2 weeks ago Up 7 days 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp opengrok [email protected]:~$ sudo docker rm dd21aed1dc33 dd21aed1dc33 # 从备份的 2013-03-13-installed-some-tools image创建新的container [email protected]:~$ sudo docker run -d \ --name opengrok-2013-03-13-installed-some-tools \ -p 8080:8080/tcp \ -e SYNC_PERIOD_MINUTES="1440" \ -v /home/jenkins/opengrok-src/:/opengrok/src/ \ -v /home/jenkins/opengrok-etc/:/opengrok/etc/ \ -v /home/jenkins/opengrok-data/:/opengrok/data/ \ my-repo/opengrok:2013-03-13-installed-some-tools 06dbce85cac958d2cee0fd73a153ebf462069c84b95618242bfb145bc9ad5872 [email protected]:~$ sudo docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 06dbce85cac9 my-repo/opengrok:2013-03-13-installed-some-tools "/scripts/start.py" 10 minutes ago Up 10 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp opengrok-2013-03-13-installed-some-tools # 或者把 docker-compose.yml 里的 "image: opengrok/docker:latest" 改为 "my-repo/opengrok:2013-03-13-installed-some-tools",然后 sudo docker compose up -d 重新创建container # export container 给别人使用, 当你想分享你对container做的成果时 [email protected]:~$ sudo docker export opengrok-2013-03-13-installed-some-tools > opengrok-v001.tar [email protected]:~$ ll -rw-rw-r-- 1 jenkins jenkins 992168960 Mar 13 19:16 opengrok-v001.tar # 然后把 tar文件share给需要的人 # import别人分享的image [email protected]:~$ sudo docker import opengrok-v001.tar thomas-repo/opengrok:jenkins-v001 sha256:2ab2148cdc7afdd6001663a53a488a267c61f8070903af171717ddd22d98eb45 [email protected]:~$ sudo docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE thomas-repo/opengrok jenkins-v001 2ab2148cdc7a 14 seconds ago 977MB [email protected]:~$ sudo docker run -d \ --name opengrok-jenkins-v001 \ -p 8080:8080/tcp \ -e SYNC_PERIOD_MINUTES="1440" \ -v /home/thomas/opengrok-src/:/opengrok/src/ \ -v /home/thomas/opengrok-etc/:/opengrok/etc/ \ -v /home/thomas/opengrok-data/:/opengrok/data/ \ thomas-repo/opengrok:jenkins-v001



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3